MySQL Version 3.23 supports tables of the new MyISAM
type and the old ISAM
type. You don't have to convert your old tables to use these with Version 3.23. By default, all new tables will be created with type MyISAM
(unless you start mysqld
with the --default-table-type=isam
option). You can change an ISAM
table to a MyISAM
table with ALTER TABLE table_name TYPE=MyISAM
or the Perl script mysql_convert_table_format
.
Version 3.22 and 3.21 clients will work without any problems with a Version 3.23 server.
The following lists tell what you have to watch out for when upgrading to Version 3.23:
tis620
character set must be fixed with myisamchk -r
or REPAIR TABLE
. DROP DATABASE
on a symbolic linked database, both the link and the original database is deleted. (This didn't happen in 3.22 because configure didn't detect the readlink
system call). OPTIMIZE TABLE
now only works for MyISAM tables. For other table types, you can use ALTER TABLE
to optimize the table. During OPTIMIZE TABLE
the table is now locked from other threads. mysql
is now by default started with the option --no-named-commands (-g)
. This option can be disabled with --enable-named-commands (-G)
. This may cause incompatibility problems in some cases, for example in SQL scripts that use named commands without a semicolon! Long format commands still work from the first line. german
character sort order, you must repair all your tables with isamchk -r
, as we have made some changes in the sort order! IF
will now depend on both arguments and not only the first argument. AUTO_INCREMENT
will not work with negative numbers. The reason for this is that negative numbers caused problems when wrapping from -1 to 0. AUTO_INCREMENT
is now for MyISAM tables handled at a lower level and is much faster than before. For MyISAM tables old numbers are also not reused anymore, even if you delete some rows from the table. CASE
, DELAYED
, ELSE
, END
, FULLTEXT
, INNER
, RIGHT
, THEN
and WHEN
are now reserved words. FLOAT(X)
is now a true floating-point type and not a value with a fixed number of decimals. DECIMAL(length,dec)
the length argument no longer includes a place for the sign or the decimal point. TIME
string must now be of one of the following formats: [[[DAYS] [H]H:]MM:]SS[.fraction]
or [[[[[H]H]H]H]MM]SS[.fraction]
LIKE
now compares strings using the same character comparison rules as '='
. If you require the old behavior, you can compile MySQL with the CXXFLAGS=-DLIKE_CMP_TOUPPER
flag. REGEXP
is now case insensitive for normal (not binary) strings. CHECK TABLE
or myisamchk
for MyISAM
tables (.MYI
) and isamchk
for ISAM (.ISM
) tables. mysqldump
files to be compatible between MySQL Version 3.22 and Version 3.23, you should not use the --opt
or --full
option to mysqldump
. DATE_FORMAT()
to make sure there is a `%' before each format character. (Later MySQL Version 3.22 did allow this syntax.) mysql_fetch_fields_direct
is now a function (it was a macro) and it returns a pointer to a MYSQL_FIELD
instead of a MYSQL_FIELD
. mysql_num_fields()
can no longer be used on a MYSQL*
object (it's now a function that takes MYSQL_RES*
as an argument. You should now use mysql_field_count()
instead. SELECT DISTINCT ...
was almost always sorted. In Version 3.23, you must use GROUP BY
or ORDER BY
to obtain sorted output. SUM()
now returns NULL
, instead of 0, if there is no matching rows. This is according to ANSI SQL. AND
or OR
with NULL
values will now return NULL
instead of 0. This mostly affects queries that use NOT
on an AND/OR
expression as NOT NULL
= NULL
. LPAD()
and RPAD()
will shorten the result string if it's longer than the length argument.
Felix Schueren <felix@monsterville.de>: For those using GRANT/REVOKE with user@FQDN-style access rights - beware, as upgrading will require you to write the user part as 'user@"host.example.com"' where before 'user@host.example.com' worked fine. I haven't seen this mentioned anywhere else.
Up | Previous | Next | Chapters | Sections | Functions | Concepts |